﻿/**********************************************************/
/* 5-10-2010 - Jeroen van Eijk - 0911305	        	  */
/*							                              */
/* Een vak op het bord                                    */
/**********************************************************/
using Roborally.CommonData.Enums;

namespace Roborally.Bord
{
    /// <summary>
    /// Val, dit is een abstracte klasse van alle speel hokjes
    /// </summary>
    public abstract class Vak : CommonData.GlobaleTypes.IVak
    {
        #region Fields en Properties
        private bool[] muur;
        #endregion

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="muur">Een array waarin staat waar de muren staan(index van de array is (int)Richting)</param>
        public Vak(bool[] muur)
        {
            this.muur = muur;
        }

        
        /// <summary>
        /// Een methode om op te vragen of op een bepaalde plaats een muur staat.
        /// </summary>
        /// <param name="richting">De kant van het hokje waar gecheckt wordt of er een muur staat.</param>
        /// <returns>True wanneer op de aangegeven plaats een muur staat</returns>
        public bool KrijgMuur(Richting richting)
        {
            return muur[(int)richting];
        }

        /// <summary>
        /// Method die het VakType van de onderliggende subklasse retourneert
        /// </summary>
        /// <returns>VakType van de onderliggende subklasse</returns>
        public abstract VakType KrijgType();

        /// <summary>
        /// Geeft de richting van het object terug indien van toepassing.
        /// </summary>
        /// <returns>Richting van het object</returns>
        public abstract Richting KrijgRichting();

        /// <summary>
        /// Geeft de draairichting van het object terug indien van toepassing.
        /// </summary>
        /// <returns>Draairichting van het object</returns>
        public abstract DraaiRichting KrijgDraairichting();

        /// <summary>
        /// Geeft het bandtype van het object terug indien van toepassing.
        /// </summary>
        /// <returns>BandType van het object</returns>
        public abstract BandType KrijgBandType();

        /// <summary>
        /// Geeft het checkpoint nummer van het object terug indien van toepassing.
        /// </summary>
        /// <returns>Checkpoint nummer van het object</returns>
        public abstract int CheckpointNummer();

        /// <summary>
        /// Geeft de dimensie van het object terug indien van toepassing.
        /// </summary>
        /// <returns>Dimensie van het object</returns>
        public abstract Dimensie KrijgDimensie();

        /// <summary>
        /// Geeft of er een lasermondin het vak bevind indien van toepassing.
        /// </summary>
        /// <returns>True als er een lasermond in zit</returns>
        public abstract bool KrijgLaserMond();

        /// <summary>
        /// Geeft de kracht van het object terug indien van toepassing.
        /// </summary>
        /// <returns>Kracht van het object</returns>
        public abstract int KrijgKracht();

        /// <summary>
        /// Geeft aan of het object deze beurt actief is terug indien van toepassing.
        /// </summary>
        /// <returns>True indien actief deze beurt</returns>
        public abstract bool Actief(int beurt);
    }
}
